#!/usr/bin/env python3
"""
检查不同环境中的 setuptools 版本
Check setuptools versions in different environments
"""

import sys
import os
import subprocess

def check_user_env():
    """检查用户环境中的setuptools版本"""
    try:
        import setuptools
        print(f"用户环境 setuptools 版本: {setuptools.__version__}")
        print(f"位置: {setuptools.__file__}")
        return setuptools.__version__
    except ImportError:
        print("用户环境中没有安装 setuptools")
        return None

def simulate_build_env_check():
    """模拟检查构建环境要求"""
    print("\n项目构建要求:")
    print("- setuptools>=64")
    print("- wheel")
    print("- cmake>=3.12")
    print("- pybind11>=2.6.0")

def check_with_pip_show():
    """使用 pip show 检查"""
    try:
        result = subprocess.run([sys.executable, "-m", "pip", "show", "setuptools"], 
                              capture_output=True, text=True)
        if result.returncode == 0:
            for line in result.stdout.split('\n'):
                if line.startswith('Version:'):
                    version = line.split(':', 1)[1].strip()
                    print(f"\npip show setuptools 版本: {version}")
                elif line.startswith('Location:'):
                    location = line.split(':', 1)[1].strip()
                    print(f"pip show setuptools 位置: {location}")
    except Exception as e:
        print(f"pip show 检查失败: {e}")

def explain_isolation():
    """解释隔离机制"""
    print("\n" + "="*60)
    print("PEP 517 构建环境隔离机制:")
    print("="*60)
    print("1. pip 读取 pyproject.toml 中的 build-system.requires")
    print("2. 创建临时隔离环境 (如 pip-build-env-xxx)")
    print("3. 在隔离环境中安装指定版本的构建依赖")
    print("4. 使用隔离环境中的工具进行构建")
    print("5. 构建完成后删除临时环境")
    print()
    print("这样做的好处:")
    print("- 避免版本冲突")
    print("- 确保构建环境干净")
    print("- 保证构建的可重现性")
    print("- 不影响用户环境")

if __name__ == "__main__":
    print("检查 setuptools 版本差异")
    print("="*40)
    
    # 检查用户环境
    user_version = check_user_env()
    
    # 显示项目要求
    simulate_build_env_check()
    
    # 使用pip show检查
    check_with_pip_show()
    
    # 解释隔离机制
    explain_isolation()
    
    # 版本比较
    if user_version:
        try:
            from packaging import version
            user_ver = version.parse(user_version)
            required_ver = version.parse("64.0.0")
            
            print(f"\n版本比较:")
            print(f"用户环境版本: {user_version}")
            print(f"项目要求版本: >=64.0")
            print(f"是否满足要求: {'是' if user_ver >= required_ver else '否'}")
            
            if user_ver < required_ver:
                print("\n⚠️  用户环境版本不满足项目要求!")
                print("   这就是为什么pip要创建隔离构建环境的原因")
        except ImportError:
            print("需要安装 packaging 模块来进行版本比较") 